<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  

  
  <title>My Blog</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <meta name="description" content="This is my first blog.">
<meta property="og:type" content="website">
<meta property="og:title" content="My Blog">
<meta property="og:url" content="http://yoursite.com/page/2/index.html">
<meta property="og:site_name" content="My Blog">
<meta property="og:description" content="This is my first blog.">
<meta property="og:locale" content="zh_CN">
<meta property="article:author" content="Alanisia">
<meta name="twitter:card" content="summary">
  
    <link rel="alternate" href="/atom.xml" title="My Blog" type="application/atom+xml">
  
  
    <link rel="icon" href="/favicon.ico">
  
  
    <link href="//fonts.googleapis.com/css?family=Source+Code+Pro" rel="stylesheet" type="text/css">
  
  
<link rel="stylesheet" href="/css/style.css">

<meta name="generator" content="Hexo 4.2.0"></head>

<body>
  <div id="container">
    <div id="wrap">
      <header id="header">
  <div id="banner"></div>
  <div id="header-outer" class="outer">
    <div id="header-title" class="inner">
      <h1 id="logo-wrap">
        <a href="/" id="logo">My Blog</a>
      </h1>
      
        <h2 id="subtitle-wrap">
          <a href="/" id="subtitle">我的博客 -- 记录编程过程中所遇到的问题与总结</a>
        </h2>
      
    </div>
    <div id="header-inner" class="inner">
      <nav id="main-nav">
        <a id="main-nav-toggle" class="nav-icon"></a>
        
          <a class="main-nav-link" href="/">Home</a>
        
          <a class="main-nav-link" href="/archives">Archives</a>
        
      </nav>
      <nav id="sub-nav">
        
          <a id="nav-rss-link" class="nav-icon" href="/atom.xml" title="RSS Feed"></a>
        
        <a id="nav-search-btn" class="nav-icon" title="搜索"></a>
      </nav>
      <div id="search-form-wrap">
        <form action="//google.com/search" method="get" accept-charset="UTF-8" class="search-form"><input type="search" name="q" class="search-form-input" placeholder="Search"><button type="submit" class="search-form-submit">&#xF002;</button><input type="hidden" name="sitesearch" value="http://yoursite.com"></form>
      </div>
    </div>
  </div>
</header>
      <div class="outer">
        <section id="main">
  
    <article id="post-nginx" class="article article-type-post" itemscope itemprop="blogPost">
  <div class="article-meta">
    <a href="/nginx/" class="article-date">
  <time datetime="2021-05-23T16:26:58.000Z" itemprop="datePublished">2021-05-23</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 itemprop="name">
      <a class="article-title" href="/nginx/">Nginx</a>
    </h1>
  

      </header>
    
    <div class="article-entry" itemprop="articleBody">
      
        <p>参考链接：</p>
<ol>
<li><a href="https://blog.csdn.net/zxd1435513775/article/details/102508463" target="_blank" rel="noopener">Nginx配置——反向代理</a></li>
</ol>
<h2 id="代理"><a href="#代理" class="headerlink" title="代理"></a>代理</h2><p>正向代理和反向代理的区别，一句话就是：如果我们客户端自己用，就是正向代理。如果实在服务器用，我们用户无感知，就是反向代理。</p>
<h3 id="正向代理"><a href="#正向代理" class="headerlink" title="正向代理"></a>正向代理</h3><p>如果把局域网外的 Internet 想象成一个巨大的资源库，则局域网中的客户端要访问 Internet，则需要通过代理服务器来访问，这种代理服务就称为正向代理。</p>
<h3 id="反向代理"><a href="#反向代理" class="headerlink" title="反向代理"></a>反向代理</h3><p>客户端对代理是无感知的，因为客户端不需要任何配置就可以访问，我们只需要将请求发送到反向代理服务器，由反向代理服务器去选择目标服务器获取数据后，在返回给客户端，此时反向代理服务器和目标服务器对外就是一个服务器，暴露的是代理服务器地址，隐藏了真实服务器 IP 地址。</p>
<h2 id="负载均衡"><a href="#负载均衡" class="headerlink" title="负载均衡"></a>负载均衡</h2><p>TODO</p>
<h2 id="nginx-conf"><a href="#nginx-conf" class="headerlink" title="nginx.conf"></a><code>nginx.conf</code></h2><p><code>nginx.conf</code>是nginx的配置文件。</p>
<p><strong>修改完<code>nginx.conf</code>文件后记得重启服务！</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo nginx -s reload <span class="comment"># 重启nginx服务</span></span><br></pre></td></tr></table></figure>

<h3 id="Nginx配置文件分析"><a href="#Nginx配置文件分析" class="headerlink" title="Nginx配置文件分析"></a>Nginx配置文件分析</h3><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">server</span> &#123;</span><br><span class="line">    <span class="attribute">listen</span> <span class="number">80</span>;</span><br><span class="line">    </span><br><span class="line">    <span class="attribute">location</span> / &#123;</span><br><span class="line">		<span class="attribute">root</span> /home/ubuntu/Web/blog;</span><br><span class="line">        <span class="attribute">index</span> index.html;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>

<p>TODO</p>

      
    </div>
    <footer class="article-footer">
      <a data-url="http://yoursite.com/nginx/" data-id="ckpb8zvka001odsvlfuzn7kcb" class="article-share-link">Share</a>
      
      
  <ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/nginx/" rel="tag">nginx</a></li></ul>

    </footer>
  </div>
  
</article>


  
    <article id="post-git-advanced" class="article article-type-post" itemscope itemprop="blogPost">
  <div class="article-meta">
    <a href="/git-advanced/" class="article-date">
  <time datetime="2021-05-13T19:54:16.000Z" itemprop="datePublished">2021-05-13</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 itemprop="name">
      <a class="article-title" href="/git-advanced/">Git进阶</a>
    </h1>
  

      </header>
    
    <div class="article-entry" itemprop="articleBody">
      
        <h2 id="Git提交"><a href="#Git提交" class="headerlink" title="Git提交"></a>Git提交</h2><h3 id="查看提交记录"><a href="#查看提交记录" class="headerlink" title="查看提交记录"></a>查看提交记录</h3><p><code>git log</code>命令用以查看提交记录：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ git <span class="built_in">log</span></span><br></pre></td></tr></table></figure>

<h3 id="修改提交信息"><a href="#修改提交信息" class="headerlink" title="修改提交信息"></a>修改提交信息</h3><p>相关链接：<a href="https://blog.csdn.net/Muscleape/article/details/105637401" target="_blank" rel="noopener">git-修改commit信息</a></p>
<p>修改commit信息主要有这几种情况：</p>
<ol>
<li>刚刚commit，还没有push，使用<code>git commit --amend</code></li>
<li>刚刚push，要修改最近一个push的commit信息，使用<code>git commit --amend</code></li>
<li>修改历史push的commit信息，使用<code>git rebase -i HEAD~n</code>【其中的n为记录数】，配合2中的命令</li>
</ol>
<h3 id="合并提交"><a href="#合并提交" class="headerlink" title="合并提交"></a>合并提交</h3><p>相关链接：<a href="https://zhuanlan.zhihu.com/p/139321091" target="_blank" rel="noopener">Git 合并多个提交的正确方式</a></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git rebase -i &lt;commit_SHA&gt; <span class="comment"># 这里的&lt;commit_SHA&gt;是你针对此项目第一个提交的前一个提交的commit</span></span><br></pre></td></tr></table></figure>

<p>摘取<code>commit_SHA</code>之后的提交合并。</p>
<h3 id="切换提交"><a href="#切换提交" class="headerlink" title="切换提交"></a>切换提交</h3><p>TODO</p>
<h2 id="Git修复"><a href="#Git修复" class="headerlink" title="Git修复"></a>Git修复</h2><p>TODO</p>
<h2 id="Git撤销"><a href="#Git撤销" class="headerlink" title="Git撤销"></a>Git撤销</h2><p>相关链接：<a href="https://zhuanlan.zhihu.com/p/94957560" target="_blank" rel="noopener">这里主要讲解一下Git撤销&amp;回滚操作</a></p>
<p>TODO</p>

      
    </div>
    <footer class="article-footer">
      <a data-url="http://yoursite.com/git-advanced/" data-id="ckpb8zvjr000qdsvlhxbz9ke9" class="article-share-link">Share</a>
      
      
  <ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/git/" rel="tag">git</a></li></ul>

    </footer>
  </div>
  
</article>


  
    <article id="post-linux-user" class="article article-type-post" itemscope itemprop="blogPost">
  <div class="article-meta">
    <a href="/linux-user/" class="article-date">
  <time datetime="2021-05-13T19:45:01.000Z" itemprop="datePublished">2021-05-13</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 itemprop="name">
      <a class="article-title" href="/linux-user/">Linux用户和用户组管理</a>
    </h1>
  

      </header>
    
    <div class="article-entry" itemprop="articleBody">
      
        <p>相关链接：<a href="https://www.runoob.com/linux/linux-user-manage.html" target="_blank" rel="noopener">Linux 用户和用户组管理 - 菜鸟教程</a></p>
<h2 id="用户与用户组"><a href="#用户与用户组" class="headerlink" title="用户与用户组"></a>用户与用户组</h2><p>Linux系统是一个多用户多任务的分时操作系统，任何一个要使用系统资源的用户，都必须首先向系统管理员申请一个账号，然后以这个账号的身份进入系统。用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪，并控制他们对系统资源的访问；另一方面也可以帮助用户组织文件，并为用户提供安全性保护。每个用户账号都拥有一个唯一的用户名和各自的口令。用户在登录时键入正确的用户名和口令后，就能够进入系统和自己的主目录。</p>
<p>每个用户都有一个用户组，系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同，如Linux下的用户属于与它同名的用户组，这个用户组在创建用户时同时创建。用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。</p>
<h2 id="查看用户-用户组"><a href="#查看用户-用户组" class="headerlink" title="查看用户/用户组"></a>查看用户/用户组</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看用户</span></span><br><span class="line">whoami</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看本机信息</span></span><br><span class="line">uname [options]</span><br><span class="line"><span class="comment"># options := [-a|-r]</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看用户组</span></span><br><span class="line">groups</span><br></pre></td></tr></table></figure>

<h2 id="切换用户-用户组"><a href="#切换用户-用户组" class="headerlink" title="切换用户/用户组"></a>切换用户/用户组</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 切换用户，user为空则切换至root用户</span></span><br><span class="line">sudo su [user]</span><br><span class="line"></span><br><span class="line"><span class="comment"># 切换用户组</span></span><br><span class="line"><span class="comment"># 如果一个用户同时属于多个用户组，那么用户可以在用户组之间切换，以便具有其他用户组的权限</span></span><br><span class="line">newgrp &lt;user&gt;</span><br><span class="line"></span><br><span class="line"><span class="comment"># 以下命令将当前用户切换到root用户组，前提条件是root用户组确实是该用户的主组或附加组</span></span><br><span class="line">newgrp root</span><br></pre></td></tr></table></figure>

<h2 id="增加用户-用户组"><a href="#增加用户-用户组" class="headerlink" title="增加用户/用户组"></a>增加用户/用户组</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 增加用户命令useradd</span></span><br><span class="line">sudo useradd [options] &lt;user&gt;</span><br><span class="line"><span class="comment"># options := [-c|-d|-m|-g|-s|-o|-G|-u]</span></span><br><span class="line"><span class="comment"># -c comment 指定一段注释性描述</span></span><br><span class="line"><span class="comment"># -d 目录 指定用户主目录，如果此目录不存在，则同时使用-m选项，可以创建主目录</span></span><br><span class="line"><span class="comment"># -g 用户组 指定用户所属的用户组</span></span><br><span class="line"><span class="comment"># -G 用户组，用户组 指定用户所属的附加组</span></span><br><span class="line"><span class="comment"># -s Shell文件 指定用户的登录Shell</span></span><br><span class="line"><span class="comment"># -u 用户号 指定用户的用户号，如果同时有-o选项，则可以重复使用其他用户的标识号</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 增加用户命令adduser</span></span><br><span class="line">sudo adduser &lt;user&gt;</span><br><span class="line"></span><br><span class="line"><span class="comment"># 增加用户组</span></span><br><span class="line">sudo groupadd [options] &lt;group&gt;</span><br><span class="line"><span class="comment"># options := [-g|-o]</span></span><br><span class="line"><span class="comment"># -g GID 指定新用户组的组标识号（GID）</span></span><br><span class="line"><span class="comment"># -o 一般与-g选项同时使用，表示新用户组的GID可以与系统已有用户组的GID相同</span></span><br></pre></td></tr></table></figure>

<h4 id="useradd和adduser的区别"><a href="#useradd和adduser的区别" class="headerlink" title="useradd和adduser的区别"></a><code>useradd</code>和<code>adduser</code>的区别</h4><p>相关链接：<a href="https://www.cnblogs.com/whitehorse/p/5847278.html" target="_blank" rel="noopener">useradd与adduser的区别</a></p>
<p>在CentOS下<code>adduser</code> 与<code>useradd</code> 指令为同一指令（经由符号连结 symbolic link），但在Ubuntu下存在区别：</p>
<ol>
<li><p><code>useradd</code>在使用该命令创建用户是不会在<code>/home</code>下自动创建与用户名同名的用户目录，而且不会自动选择shell版本，也没有设置密码，那么这个用户是不能登录的，需要使用<code>passwd</code>命令修改密码。</p>
</li>
<li><p><code>adduser</code>在使用该命令创建用户是会在<code>/home</code>下自动创建与用户名同名的用户目录，系统shell版本，会在创建时会提示输入密码，更加友好。</p>
</li>
</ol>
<h5 id="例子"><a href="#例子" class="headerlink" title="例子"></a>例子</h5><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 以下命令创建了一个用户sam，其中-d和-m选项用来为登录名sam产生一个主目录 /home/sam（/home为默认的用户主目录所在的父目录）</span></span><br><span class="line">sudo useradd -d /home/sam -m sam</span><br><span class="line"><span class="comment"># 以下命令新建了一个用户gem，该用户的登录Shell是 /bin/sh，它属于group用户组，同时又属于adm和root用户组，其中group用户组是其主组</span></span><br><span class="line">sudo useradd -s /bin/sh -g group -G adm,root gem</span><br><span class="line"></span><br><span class="line"><span class="comment"># 以下命令向系统中增加了一个新组group1，新组的组标识号是在当前已有的最大组标识号的基础上加1</span></span><br><span class="line">sudo groupadd group1</span><br><span class="line"><span class="comment"># 以下命令向系统中增加了一个新组group2，同时指定新组的组标识号是101</span></span><br><span class="line">sudo groupadd -g 101 group2</span><br></pre></td></tr></table></figure>

<h2 id="删除用户-用户组"><a href="#删除用户-用户组" class="headerlink" title="删除用户/用户组"></a>删除用户/用户组</h2><p>如果一个用户的账号不再使用，可以从系统中删除。删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除，必要时还删除用户的主目录。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 删除用户</span></span><br><span class="line">sudo userdel [options] &lt;user&gt;</span><br><span class="line"><span class="comment"># options := [-r]</span></span><br><span class="line"><span class="comment"># -r 把用户的主目录一起删除</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 删除用户组</span></span><br><span class="line">sudo groupdel &lt;group&gt;</span><br></pre></td></tr></table></figure>

<h5 id="例子-1"><a href="#例子-1" class="headerlink" title="例子"></a>例子</h5><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sudo userdel -r sam</span><br><span class="line"><span class="comment"># 此命令删除用户sam在系统文件中（主要是/etc/passwd, /etc/shadow, /etc/group等）的记录，同时删除用户的主目录</span></span><br></pre></td></tr></table></figure>

<h2 id="口令修改"><a href="#口令修改" class="headerlink" title="口令修改"></a>口令修改</h2><p>用户管理的一项重要内容是用户口令的管理。用户账号刚创建时没有口令，但是被系统锁定，无法使用，必须为其指定口令后才可以使用，即使是指定空口令。</p>
<p>指定和修改用户口令的Shell命令是<code>passwd</code>。超级用户可以为自己和其他用户指定口令，普通用户只能用它修改自己的口令。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">sudo passwd [options] [user]</span><br><span class="line"><span class="comment"># options := [-l|-u|-d|-f]</span></span><br><span class="line"><span class="comment"># -l 锁定口令，即禁用账号</span></span><br><span class="line"><span class="comment"># -u 口令解锁</span></span><br><span class="line"><span class="comment"># -d 使账号无口令</span></span><br><span class="line"><span class="comment"># -f 强迫用户下次登录时修改口令</span></span><br><span class="line"><span class="comment"># 若user缺省，则修改的是当前用户的密码</span></span><br></pre></td></tr></table></figure>

<h2 id="权限修改"><a href="#权限修改" class="headerlink" title="权限修改"></a>权限修改</h2><p>相关链接：<a href="https://www.runoob.com/linux/linux-comm-chmod.html" target="_blank" rel="noopener">Linux chmod命令 - 菜鸟教程</a></p>
<p>Linux/Unix 的文件调用权限分为三级 : 文件所有者（Owner）、用户组（Group）、其它用户（Other Users）。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">chmod [-cfvR] [--<span class="built_in">help</span>] [--version] mode file...</span><br><span class="line"><span class="comment"># mode := [ugoa...][[+-=][rwxX]...][,...]，权限设定字串</span></span><br><span class="line"><span class="comment"># u 表示该文件的拥有者，g 表示与该文件的拥有者属于同一个群体(group)者，o 表示其他以外的人，a 表示这三者皆是</span></span><br><span class="line"><span class="comment"># + 表示增加权限、- 表示取消权限、= 表示唯一设定权限</span></span><br><span class="line"><span class="comment"># r 表示可读取，w 表示可写入，x 表示可执行，X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行</span></span><br><span class="line"><span class="comment"># -c : 若该文件权限确实已经更改，才显示其更改动作</span></span><br><span class="line"><span class="comment"># -f : 若该文件权限无法被更改也不要显示错误讯息</span></span><br><span class="line"><span class="comment"># -v : 显示权限变更的详细资料</span></span><br><span class="line"><span class="comment"># -R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)</span></span><br></pre></td></tr></table></figure>

<h2 id="账号修改"><a href="#账号修改" class="headerlink" title="账号修改"></a>账号修改</h2><p>修改用户账号就是根据实际情况更改用户的有关属性，如用户号、主目录、用户组、登录Shell等。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sudo usermod [options] [user]</span><br><span class="line"><span class="comment"># options := [-c|-d|-m|-g|-s|-o|-G|-u|-l]</span></span><br></pre></td></tr></table></figure>

<h5 id="例子-2"><a href="#例子-2" class="headerlink" title="例子"></a>例子</h5><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sudo usermod -s /bin/ksh -d /home/z –g developer sam</span><br><span class="line"><span class="comment"># 此命令将用户sam的登录Shell修改为ksh，主目录改为/home/z，用户组改为developer</span></span><br></pre></td></tr></table></figure>

<h2 id="用户组属性修改"><a href="#用户组属性修改" class="headerlink" title="用户组属性修改"></a>用户组属性修改</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">sudo groupmod [options] &lt;group&gt;</span><br><span class="line"><span class="comment"># options := [-g|-o|-n]，</span></span><br><span class="line"><span class="comment"># -g GID 为用户组指定新的组标识号。</span></span><br><span class="line"><span class="comment"># -o 与-g选项同时使用，用户组的新GID可以与系统已有用户组的GID相同。</span></span><br><span class="line"><span class="comment"># -n新用户组 将用户组的名字改为新名字</span></span><br></pre></td></tr></table></figure>

<h5 id="例子-3"><a href="#例子-3" class="headerlink" title="例子"></a>例子</h5><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">sudo groupmod -g 102 group2</span><br><span class="line"><span class="comment"># 以上命令将组group2的组标识号修改为102。</span></span><br><span class="line">sudo groupmod –g 10000 -n group3 group2</span><br><span class="line"><span class="comment"># 以上命令将组group2的标识号改为10000，组名修改为group3。</span></span><br></pre></td></tr></table></figure>


      
    </div>
    <footer class="article-footer">
      <a data-url="http://yoursite.com/linux-user/" data-id="ckpb8zvk00019dsvl7zzfht8t" class="article-share-link">Share</a>
      
      
  <ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/linux/" rel="tag">linux</a></li></ul>

    </footer>
  </div>
  
</article>


  
    <article id="post-tmux" class="article article-type-post" itemscope itemprop="blogPost">
  <div class="article-meta">
    <a href="/tmux/" class="article-date">
  <time datetime="2021-04-24T16:23:11.000Z" itemprop="datePublished">2021-04-24</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 itemprop="name">
      <a class="article-title" href="/tmux/">Tmux</a>
    </h1>
  

      </header>
    
    <div class="article-entry" itemprop="articleBody">
      
        <p>Tmux 是一个终端复用器（terminal multiplexer），非常有用，属于常用的开发工具。</p>
<p>链接：<a href="https://www.ruanyifeng.com/blog/2019/10/tmux.html" target="_blank" rel="noopener">Tmux 使用教程</a>。</p>
<h2 id="Tmux介绍"><a href="#Tmux介绍" class="headerlink" title="Tmux介绍"></a>Tmux介绍</h2><p>命令行的典型使用方式是，打开一个终端窗口（terminal window，以下简称”窗口”），在里面输入命令。用户与计算机的这种临时的交互，称为一次”会话”（session） 。</p>
<p>会话的一个重要特点是，窗口与其中启动的进程是连在一起的。打开窗口，会话开始；关闭窗口，会话结束，会话内部的进程也会随之终止，不管有没有运行完。</p>
<p>一个典型的例子就是，SSH 登录远程计算机，打开一个远程窗口执行命令。这时，网络突然断线，再次登录的时候，是找不回上一次执行的命令的。因为上一次 SSH 会话已经终止了，里面的进程也随之消失了。</p>
<p>为了解决这个问题，会话与窗口可以”解绑”：窗口关闭时，会话并不终止，而是继续运行，等到以后需要的时候，再让会话”绑定”其他窗口。</p>
<p><strong>Tmux 就是会话与窗口的”解绑”工具，将它们彻底分离。</strong></p>
<blockquote>
<p>（1）它允许在单个窗口中，同时访问多个会话。这对于同时运行多个命令行程序很有用。</p>
<p>（2） 它可以让新窗口”接入”已经存在的会话。</p>
<p>（3）它允许每个会话有多个连接窗口，因此可以多人实时共享会话。</p>
<p>（4）它还支持窗口任意的垂直和水平拆分。</p>
</blockquote>
<p>类似的终端复用器还有 GNU Screen。Tmux 与它功能相似，但是更易用，也更强大。</p>
<h2 id="用法"><a href="#用法" class="headerlink" title="用法"></a>用法</h2><h3 id="启动与退出"><a href="#启动与退出" class="headerlink" title="启动与退出"></a>启动与退出</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ tmux</span><br></pre></td></tr></table></figure>

<p>上面命令会启动 Tmux 窗口，底部有一个状态栏。状态栏的左侧是窗口信息（编号和名称），右侧是系统信息。</p>
<p>按下<code>Ctrl+d</code>或者显式输入<code>exit</code>命令，就可以退出 Tmux 窗口。</p>
<h3 id="会话管理"><a href="#会话管理" class="headerlink" title="会话管理"></a>会话管理</h3><h4 id="新建会话"><a href="#新建会话" class="headerlink" title="新建会话"></a>新建会话</h4><p>第一个启动的 Tmux 窗口，编号是<code>0</code>，第二个窗口的编号是<code>1</code>，以此类推。这些窗口对应的会话，就是 0 号会话、1 号会话。</p>
<p>使用编号区分会话，不太直观，更好的方法是为会话起名。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ tmux new -s &lt;session-name&gt;</span><br></pre></td></tr></table></figure>

<p>上面命令新建一个指定名称的会话。</p>
<h4 id="分离会话"><a href="#分离会话" class="headerlink" title="分离会话"></a>分离会话</h4><p><code>tmux attach</code>命令用于重新接入某个已存在的会话。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 使用会话编号</span></span><br><span class="line">$ tmux attach -t 0</span><br><span class="line"><span class="comment"># 使用会话名称</span></span><br><span class="line">$ tmux attach -t &lt;session-name&gt;</span><br></pre></td></tr></table></figure>

<h4 id="接入会话"><a href="#接入会话" class="headerlink" title="接入会话"></a>接入会话</h4><p><code>tmux attach</code>命令用于重新接入某个已存在的会话。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 使用会话编号</span></span><br><span class="line">$ tmux attach -t 0</span><br><span class="line"><span class="comment"># 使用会话名称</span></span><br><span class="line">$ tmux attach -t &lt;session-name&gt;</span><br></pre></td></tr></table></figure>

<h4 id="杀死会话"><a href="#杀死会话" class="headerlink" title="杀死会话"></a>杀死会话</h4><p><code>tmux kill-session</code>命令用于杀死某个会话。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 使用会话编号</span></span><br><span class="line">$ tmux <span class="built_in">kill</span>-session -t 0</span><br><span class="line"><span class="comment"># 使用会话名称</span></span><br><span class="line">$ tmux <span class="built_in">kill</span>-session -t &lt;session-name&gt;</span><br></pre></td></tr></table></figure>

<h4 id="切换会话"><a href="#切换会话" class="headerlink" title="切换会话"></a>切换会话</h4><p><code>tmux switch</code>命令用于切换会话。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 使用会话编号</span></span><br><span class="line">$ tmux switch -t 0</span><br><span class="line"><span class="comment"># 使用会话名称</span></span><br><span class="line">$ tmux switch -t &lt;session-name&gt;</span><br></pre></td></tr></table></figure>

<h4 id="重命名会话"><a href="#重命名会话" class="headerlink" title="重命名会话"></a>重命名会话</h4><p><code>tmux rename-session</code>命令用于重命名会话。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ tmux rename-session -t 0 &lt;new-name&gt; <span class="comment"># 将0号会话重命名</span></span><br></pre></td></tr></table></figure>

<h4 id="最简操作流程"><a href="#最简操作流程" class="headerlink" title="最简操作流程"></a>最简操作流程</h4><p>综上所述，以下是 Tmux 的最简操作流程。</p>
<blockquote>
<ol>
<li>新建会话<code>tmux new -s my_session</code>。</li>
<li>在 Tmux 窗口运行所需的程序。</li>
<li>按下快捷键<code>Ctrl+b d</code>将会话分离。</li>
<li>下次使用时，重新连接到会话<code>tmux attach-session -t my_session</code>。</li>
</ol>
</blockquote>
<h3 id="窗格操作"><a href="#窗格操作" class="headerlink" title="窗格操作"></a>窗格操作</h3><p>Tmux 可以将窗口分成多个窗格（pane），每个窗格运行不同的命令。以下命令都是在 Tmux 窗口中执行。</p>
<h4 id="划分窗格"><a href="#划分窗格" class="headerlink" title="划分窗格"></a>划分窗格</h4><p><code>tmux split-window</code>命令用来划分窗格。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 划分上下两个窗格</span></span><br><span class="line">$ tmux split-window</span><br><span class="line"><span class="comment"># 划分左右两个窗格</span></span><br><span class="line">$ tmux split-window -h</span><br></pre></td></tr></table></figure>

<h4 id="移动光标"><a href="#移动光标" class="headerlink" title="移动光标"></a>移动光标</h4><p><code>tmux select-pane</code>命令用来移动光标位置。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">$ tmux select-pane -U <span class="comment"># 光标切换到上方窗格</span></span><br><span class="line">$ tmux select-pane -D <span class="comment"># 光标切换到下方窗格</span></span><br><span class="line">$ tmux select-pane -L <span class="comment"># 光标切换到左边窗格</span></span><br><span class="line">$ tmux select-pane -R <span class="comment"># 光标切换到右边窗格</span></span><br></pre></td></tr></table></figure>

<h4 id="交换窗格位置"><a href="#交换窗格位置" class="headerlink" title="交换窗格位置"></a>交换窗格位置</h4><p><code>tmux swap-pane</code>命令用来交换窗格位置。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$ tmux swap-pane -U <span class="comment"># 当前窗格上移</span></span><br><span class="line">$ tmux swap-pane -D <span class="comment"># 当前窗格下移</span></span><br></pre></td></tr></table></figure>

<h3 id="窗口"><a href="#窗口" class="headerlink" title="窗口"></a>窗口</h3><p>除了将一个窗口划分成多个窗格，Tmux 也允许新建多个窗口。</p>
<h4 id="新建窗口"><a href="#新建窗口" class="headerlink" title="新建窗口"></a>新建窗口</h4><p><code>tmux new-window</code>命令用来创建新窗口。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">$ tmux new-window</span><br><span class="line"><span class="comment"># 新建一个指定名称的窗口</span></span><br><span class="line">$ tmux new-window -n &lt;window-name&gt;</span><br></pre></td></tr></table></figure>

<h4 id="切换窗口"><a href="#切换窗口" class="headerlink" title="切换窗口"></a>切换窗口</h4><p><code>tmux select-window</code>命令用来切换窗口。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 切换到指定编号的窗口</span></span><br><span class="line">$ tmux select-window -t &lt;window-number&gt;</span><br><span class="line"><span class="comment"># 切换到指定名称的窗口</span></span><br><span class="line">$ tmux select-window -t &lt;window-name&gt;</span><br></pre></td></tr></table></figure>

<h4 id="重命名窗口"><a href="#重命名窗口" class="headerlink" title="重命名窗口"></a>重命名窗口</h4><p><code>tmux rename-window</code>命令用于为当前窗口起名（或重命名）。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ tmux rename-window &lt;new-name&gt;</span><br></pre></td></tr></table></figure>

<h3 id="其他"><a href="#其他" class="headerlink" title="其他"></a>其他</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 列出所有快捷键，及其对应的 Tmux 命令</span></span><br><span class="line">$ tmux list-keys</span><br><span class="line"><span class="comment"># 列出所有 Tmux 命令及其参数</span></span><br><span class="line">$ tmux list-commands</span><br><span class="line"><span class="comment"># 列出当前所有 Tmux 会话的信息</span></span><br><span class="line">$ tmux info</span><br><span class="line"><span class="comment"># 重新加载当前的 Tmux 配置</span></span><br><span class="line">$ tmux <span class="built_in">source</span>-file ~/.tmux.conf</span><br></pre></td></tr></table></figure>

<h3 id="快捷键"><a href="#快捷键" class="headerlink" title="快捷键"></a>快捷键</h3><h4 id="会话"><a href="#会话" class="headerlink" title="会话"></a>会话</h4><ul>
<li><code>Ctrl+b d</code>：分离当前会话。</li>
<li><code>Ctrl+b s</code>：列出所有会话。</li>
<li><code>Ctrl+b $</code>：重命名当前会话。</li>
</ul>
<h4 id="窗格"><a href="#窗格" class="headerlink" title="窗格"></a>窗格</h4><ul>
<li><code>Ctrl+b %</code>：划分左右两个窗格。</li>
<li><code>Ctrl+b &quot;</code>：划分上下两个窗格。</li>
<li><code>Ctrl+b &lt;arrow key&gt;</code>：光标切换到其他窗格。<code>&lt;arrow key&gt;</code>是指向要切换到的窗格的方向键，比如切换到下方窗格，就按方向键<code>↓</code>。</li>
<li><code>Ctrl+b ;</code>：光标切换到上一个窗格。</li>
<li><code>Ctrl+b o</code>：光标切换到下一个窗格。</li>
<li><code>Ctrl+b {</code>：当前窗格与上一个窗格交换位置。</li>
<li><code>Ctrl+b }</code>：当前窗格与下一个窗格交换位置。</li>
<li><code>Ctrl+b Ctrl+o</code>：所有窗格向前移动一个位置，第一个窗格变成最后一个窗格。</li>
<li><code>Ctrl+b Alt+o</code>：所有窗格向后移动一个位置，最后一个窗格变成第一个窗格。</li>
<li><code>Ctrl+b x</code>：关闭当前窗格。</li>
<li><code>Ctrl+b !</code>：将当前窗格拆分为一个独立窗口。</li>
<li><code>Ctrl+b z</code>：当前窗格全屏显示，再使用一次会变回原来大小。</li>
<li><code>Ctrl+b Ctrl+&lt;arrow key&gt;</code>：按箭头方向调整窗格大小。</li>
<li><code>Ctrl+b q</code>：显示窗格编号。</li>
</ul>
<h4 id="窗口-1"><a href="#窗口-1" class="headerlink" title="窗口"></a>窗口</h4><ul>
<li><code>Ctrl+b c</code>：创建一个新窗口，状态栏会显示多个窗口的信息。</li>
<li><code>Ctrl+b p</code>：切换到上一个窗口（按照状态栏上的顺序）。</li>
<li><code>Ctrl+b n</code>：切换到下一个窗口。</li>
<li><code>Ctrl+b &lt;number&gt;</code>：切换到指定编号的窗口，其中的<code>&lt;number&gt;</code>是状态栏上的窗口编号。</li>
<li><code>Ctrl+b w</code>：从列表中选择窗口。</li>
<li><code>Ctrl+b ,</code>：窗口重命名。</li>
</ul>

      
    </div>
    <footer class="article-footer">
      <a data-url="http://yoursite.com/tmux/" data-id="ckpb8zvkq002jdsvl94z61md2" class="article-share-link">Share</a>
      
      
  <ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/linux/" rel="tag">linux</a></li></ul>

    </footer>
  </div>
  
</article>


  
    <article id="post-zookeeper" class="article article-type-post" itemscope itemprop="blogPost">
  <div class="article-meta">
    <a href="/zookeeper/" class="article-date">
  <time datetime="2021-03-04T23:59:24.000Z" itemprop="datePublished">2021-03-04</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 itemprop="name">
      <a class="article-title" href="/zookeeper/">ZooKeeper</a>
    </h1>
  

      </header>
    
    <div class="article-entry" itemprop="articleBody">
      
        <h2 id="安装与运行"><a href="#安装与运行" class="headerlink" title="安装与运行"></a>安装与运行</h2><h3 id="Docker"><a href="#Docker" class="headerlink" title="Docker"></a>Docker</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">$ docker pull zookeeper <span class="comment"># 拉取zookeeper镜像</span></span><br><span class="line">$ docker run --name myzk -d zookeeper:latest <span class="comment"># 运行镜像, myzk为自定义的zookeeper容器名</span></span><br><span class="line">$ docker logs -f myzk <span class="comment"># 查看zookeeper运行情况</span></span><br></pre></td></tr></table></figure>

<h4 id="使用-ZK-命令行客户端连接-ZK"><a href="#使用-ZK-命令行客户端连接-ZK" class="headerlink" title="使用 ZK 命令行客户端连接 ZK"></a>使用 ZK 命令行客户端连接 ZK</h4><p>因为刚才我们启动的那个 ZK 容器并没有绑定宿主机的端口，因此我们不能直接访问它．但是我们可以通过 Docker 的 link 机制来对这个 ZK 容器进行访问．执行如下命令：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ docker run -it --rm --link myzk:zookeeper zookeeper zkCli.sh -server zookeeper</span><br></pre></td></tr></table></figure>

<p>该命令的含义如下：</p>
<ol>
<li>启动一个 zookeeper 镜像，并运行这个镜像内的 zkCli.sh 命令，命令参数是 “-server zookeeper”</li>
<li>将我们先前启动的名为 myzk 的容器连接(link) 到我们新建的这个容器上，并将其主机名命名为 <strong>zookeeper</strong></li>
</ol>
<p>当我们执行了这个命令后, 就可以像正常使用 ZK 命令行客户端一样操作 ZK 服务了．</p>
<p><em>相关文章链接: <a href="https://www.cnblogs.com/kingkoo/p/8732448.html" target="_blank" rel="noopener">使用 Docker 一步搞定 ZooKeeper 集群的搭建</a></em></p>
<h3 id="本地启动"><a href="#本地启动" class="headerlink" title="本地启动"></a>本地启动</h3><p>从官网下载压缩包，解压。执行以下命令启动ZooKeeper服务器：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> apache-zookeeper-3.7.0-bin/bin</span><br><span class="line">./zkServer.sh</span><br></pre></td></tr></table></figure>

<p>执行以下命令启动客户端：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> apache-zookeeper-3.7.0-bin/bin</span><br><span class="line">./zkCli.sh</span><br></pre></td></tr></table></figure>

<h2 id="JAVA操纵Zookeeper"><a href="#JAVA操纵Zookeeper" class="headerlink" title="JAVA操纵Ｚookeeper"></a>JAVA操纵Ｚookeeper</h2><h3 id="引入依赖-Maven"><a href="#引入依赖-Maven" class="headerlink" title="引入依赖(Maven)"></a>引入依赖(Maven)</h3><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">&lt;!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper --&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">dependency</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">groupId</span>&gt;</span>org.apache.zookeeper<span class="tag">&lt;/<span class="name">groupId</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">artifactId</span>&gt;</span>zookeeper<span class="tag">&lt;/<span class="name">artifactId</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">version</span>&gt;</span>3.4.7<span class="tag">&lt;/<span class="name">version</span>&gt;</span> <span class="comment">&lt;!-- 使用zookeeper官方api的时候，请保证jar包的版本，和zk集群中zk的版本相同 --&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">dependency</span>&gt;</span></span><br></pre></td></tr></table></figure>

<h3 id="建立Zookeeper集群"><a href="#建立Zookeeper集群" class="headerlink" title="建立Zookeeper集群"></a>建立Zookeeper集群</h3><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">connectZKCluster</span><span class="params">()</span> <span class="keyword">throws</span> IOException, KeeperException, InterruptedException </span>&#123;</span><br><span class="line">    ZooKeeper zk = <span class="keyword">new</span> ZooKeeper(<span class="string">"192.168.1.103:2181;192.168.1.4:2181;192.168.1.5:2181"</span>, <span class="number">20000</span>, watchedEvent -&gt; &#123;</span><br><span class="line">       <span class="comment">// do something to watch event </span></span><br><span class="line">    &#125;);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>

<h3 id="操作数据"><a href="#操作数据" class="headerlink" title="操作数据"></a>操作数据</h3><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// <span class="doctag">TODO:</span> 待编辑</span></span><br></pre></td></tr></table></figure>


      
    </div>
    <footer class="article-footer">
      <a data-url="http://yoursite.com/zookeeper/" data-id="ckpb8zvll003mdsvla0f35ehf" class="article-share-link">Share</a>
      
      
  <ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/zookeeper/" rel="tag">zookeeper</a></li></ul>

    </footer>
  </div>
  
</article>


  


  <nav id="page-nav">
    
    <a class="extend prev" rel="prev" href="/">&amp;laquo; 上一页</a><a class="page-number" href="/">1</a><span class="page-number current">2</span><a class="page-number" href="/page/3/">3</a><a class="page-number" href="/page/4/">4</a><span class="space">&hellip;</span><a class="page-number" href="/page/13/">13</a><a class="extend next" rel="next" href="/page/3/">下一页 &amp;raquo;</a>
  </nav>

</section>
        
          <aside id="sidebar">
  
    

  
    
  <div class="widget-wrap">
    <h3 class="widget-title">标签</h3>
    <div class="widget">
      <ul class="tag-list" itemprop="keywords"><li class="tag-list-item"><a class="tag-list-link" href="/tags/android/" rel="tag">android</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/data-structure/" rel="tag">data structure</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/docker/" rel="tag">docker</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/git/" rel="tag">git</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/go/" rel="tag">go</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/hexo/" rel="tag">hexo</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/java/" rel="tag">java</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/javascript/" rel="tag">javascript</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/json/" rel="tag">json</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/linux/" rel="tag">linux</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/maven/" rel="tag">maven</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/mybatis/" rel="tag">mybatis</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/mysql/" rel="tag">mysql</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/network/" rel="tag">network</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/nginx/" rel="tag">nginx</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/nodejs/" rel="tag">nodejs</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/searching/" rel="tag">searching</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/sorting/" rel="tag">sorting</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/sublime-text/" rel="tag">sublime text</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/termux/" rel="tag">termux</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/theia/" rel="tag">theia</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/typora/" rel="tag">typora</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/vala/" rel="tag">vala</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/vim/" rel="tag">vim</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/vue/" rel="tag">vue</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/zig/" rel="tag">zig</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/zookeeper/" rel="tag">zookeeper</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">标签云</h3>
    <div class="widget tagcloud">
      <a href="/tags/android/" style="font-size: 10px;">android</a> <a href="/tags/data-structure/" style="font-size: 10px;">data structure</a> <a href="/tags/docker/" style="font-size: 10px;">docker</a> <a href="/tags/git/" style="font-size: 15px;">git</a> <a href="/tags/go/" style="font-size: 10px;">go</a> <a href="/tags/hexo/" style="font-size: 10px;">hexo</a> <a href="/tags/java/" style="font-size: 18.33px;">java</a> <a href="/tags/javascript/" style="font-size: 11.67px;">javascript</a> <a href="/tags/json/" style="font-size: 10px;">json</a> <a href="/tags/linux/" style="font-size: 20px;">linux</a> <a href="/tags/maven/" style="font-size: 10px;">maven</a> <a href="/tags/mybatis/" style="font-size: 10px;">mybatis</a> <a href="/tags/mysql/" style="font-size: 11.67px;">mysql</a> <a href="/tags/network/" style="font-size: 11.67px;">network</a> <a href="/tags/nginx/" style="font-size: 10px;">nginx</a> <a href="/tags/nodejs/" style="font-size: 13.33px;">nodejs</a> <a href="/tags/searching/" style="font-size: 10px;">searching</a> <a href="/tags/sorting/" style="font-size: 16.67px;">sorting</a> <a href="/tags/sublime-text/" style="font-size: 10px;">sublime text</a> <a href="/tags/termux/" style="font-size: 10px;">termux</a> <a href="/tags/theia/" style="font-size: 10px;">theia</a> <a href="/tags/typora/" style="font-size: 10px;">typora</a> <a href="/tags/vala/" style="font-size: 10px;">vala</a> <a href="/tags/vim/" style="font-size: 15px;">vim</a> <a href="/tags/vue/" style="font-size: 11.67px;">vue</a> <a href="/tags/zig/" style="font-size: 10px;">zig</a> <a href="/tags/zookeeper/" style="font-size: 10px;">zookeeper</a>
    </div>
  </div>

  
    
  <div class="widget-wrap">
    <h3 class="widget-title">归档</h3>
    <div class="widget">
      <ul class="archive-list"><li class="archive-list-item"><a class="archive-list-link" href="/archives/2021/05/">五月 2021</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2021/04/">四月 2021</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2021/03/">三月 2021</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2021/01/">一月 2021</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2020/11/">十一月 2020</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2020/10/">十月 2020</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2020/09/">九月 2020</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2020/08/">八月 2020</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2020/07/">七月 2020</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2020/06/">六月 2020</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2020/05/">五月 2020</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2020/03/">三月 2020</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2020/02/">二月 2020</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">最新文章</h3>
    <div class="widget">
      <ul>
        
          <li>
            <a href="/java-hashmap/">java.util.HashMap</a>
          </li>
        
          <li>
            <a href="/jvm/">JVM</a>
          </li>
        
          <li>
            <a href="/java-locks/">Java锁</a>
          </li>
        
          <li>
            <a href="/java-references/">Java引用</a>
          </li>
        
          <li>
            <a href="/gitea/">Gitea</a>
          </li>
        
      </ul>
    </div>
  </div>

  
</aside>
        
      </div>
      <footer id="footer">
  
  <div class="outer">
    <div id="footer-info" class="inner">
      &copy; 2021 Alanisia<br>
      Powered by <a href="http://hexo.io/" target="_blank">Hexo</a>
    </div>
  </div>
</footer>
    </div>
    <nav id="mobile-nav">
  
    <a href="/" class="mobile-nav-link">Home</a>
  
    <a href="/archives" class="mobile-nav-link">Archives</a>
  
</nav>
    

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>


  
<link rel="stylesheet" href="/fancybox/jquery.fancybox.css">

  
<script src="/fancybox/jquery.fancybox.pack.js"></script>




<script src="/js/script.js"></script>




  </div>
</body>
</html>